import { API } from '@/services/common/api'
import { splitContactId } from '@/services/contacts'
import { type RawExternalContact, formatRawExternalContact } from '../externals'
import { formatRawInternalContact } from '../internals'

/**
 * 获取指定自然人联系人（客户、员工）的信息
 * 若客户不存在、已删除好友、且没有对应员工，返回 null
 * 注意：此接口会实际从企微处获取最新的资料，频繁调用会影响性能
 *
 * 后端在遇到不存在的联系人时，不会返回 null，而是返回大部分字段都是 null 的对象。
 * 可通过 conversation_id 是否为 null 明确判断是否是这一情况。
 *
 * contactId: 联系人 ID
 * qywxCorpId: 联系人所属企微的 corpid，用来判断是否是员工联系人
 */
export async function getPeopleContactInfo(contactId: string, qywxCorpId: string) {
  const [ownerWxid, contactUserId] = splitContactId(contactId)
  return API('/Contact/ContactInfo', {
    data: { wxid: ownerWxid, contactUserId },
    formatter(
      raw:
        | (Omit<RawExternalContact, 'conversation_id'> & { conversation_id: string | null })
        | null,
    ) {
      // 如果联系人有 corp_id 且和所属企业微信的 一致，说明是员工
      if (raw && raw.conversation_id !== null) {
        return raw.corp_id === qywxCorpId
          ? formatRawInternalContact(raw as RawExternalContact)
          : formatRawExternalContact(raw as RawExternalContact)
      } else {
        return null
      }
    },
  })
}
